package com.ctrip.ec.api.admin.controller.module;
import com.ctrip.ec.api.admin.common.ValidateException;
import com.ctrip.ec.api.admin.model.query.QueryModel;
import com.ctrip.ec.biz.dao.module.ModuleRoleDao;
import com.ctrip.ec.biz.entity.goods.GoodsCategoryEntity;
import com.ctrip.ec.biz.entity.module.ModuleRoleEntity;
import com.ctrip.ec.biz.entity.role.SysRole;
import com.ctrip.ec.dal.PagerSetting;
import com.ctrip.ec.api.admin.common.RequestContext;
import com.ctrip.ec.biz.dao.module.ModuleDao;
import com.ctrip.ec.biz.entity.module.ModuleEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.List;
@RestController
@RequestMapping("module")
public class ModuleController{
    @Autowired
    private ModuleDao module;

    @Autowired
    private ModuleRoleDao moduleRole;

    @GetMapping("list")
    public List<ModuleEntity> list() throws SQLException {
        List<ModuleEntity> list = module.list();
        return list;
    }

    @PostMapping("list")
    public List<ModuleEntity> list(@RequestBody QueryModel model) throws  SQLException{
        PagerSetting setting = model.build();
        List<ModuleEntity> list = module.list(setting);
        RequestContext.setResponseHeaderCount(setting.getRecordCount());
        return list;
    }

    @GetMapping("listByUser")
    public List<ModuleEntity> listByUser() throws SQLException {
        List<ModuleEntity> list = module.listByUser(RequestContext.getUserId());
        return list;
    }

    @GetMapping("detail/{id}")
    public  ModuleEntity detail(@PathVariable Long id) throws SQLException {
        return module.entity(id);
    }

    @PostMapping("save")
    public  Long save(@RequestBody ModuleEntity entity) throws SQLException {
        boolean isAdd = false;
        if (entity.add()) {
            isAdd = true;
            if(entity.getParentId() == 0){
                entity.setLayer(0);
                entity.setPath(",");
            }
            else {
                ModuleEntity parent = module.entity(entity.getParentId());
                entity.setLayer(parent.getLayer() + 1);
                entity.setPath(parent.getPath() + parent.getId() + ",");
            }
        }

        //重名的判断
        if(module.existName(entity.getName(),entity.getParentId(),entity.getId())){
            throw new ValidateException("模块不能重名");
        }

        module.save(entity);

        //默认把超级管理员角色加进去
        if(isAdd) {
            ModuleRoleEntity moduleRoleEntity = new ModuleRoleEntity();
            moduleRoleEntity.setModuleId(entity.getId());
            moduleRoleEntity.setRoleId(SysRole.superadmin.getId());
            moduleRole.save(moduleRoleEntity);
        }

        return entity.getId();
    }

    @PostMapping("delete")
    public  void delete(@RequestBody List<Long> ids) throws SQLException {
        module.delete(ids);
    }

    @PostMapping("erase")
    public void erase(@RequestBody List<Long> ids) throws  SQLException{
        module.erase(ids);
    }

    @PostMapping("unerase")
    public  void unerase(@RequestBody List<Long> ids) throws  SQLException{
        module.unerase(ids);
    }
}
